// 第一题
// 下面代码的输出是什么？
var a = 1;
(function a() {
    // 'use strict'
    a = 2;// 无效赋值
    console.log(a);
})();

// 结果： Function

// 知识点：
//     1、因为函数名称和变量名称相同，如果函数是字面量声明那么a将会是函数，如果是定义声明a是变量
//     2、函数a自调用将a变量赋值成该函数，且只读，不可改变，所以打印前a存储的是函数




//      第二题
// 下面打印的内容是什么？
var arr = [0];
if (arr) {// 1
    console.log('1=>', arr == true);// 2
} else {
    console.log('2=>', a);
};

// 结果： 1=> false

// 知识点：
    // 1、在【1】的时候实际上进行了Boolen([0])的操作
    // 2、在【2】的时候进行了变量的隐式转换  
    // [0] => [0].valueof() => [0].toString() 即 [0].join() => '0' = 0

    // 变量的隐式转换
    // 1、一边是布尔值转换成数值进行比较
    // 2、一边是字符串转换成数值进行比较
    // 3、一边是对象，将对象转成原始值
    //     3.1 valueof()
    //     3.2 toString()
    //     3.3 TypeError异常
    // 4、null == undefined 是 true
    // 5、NaN和任何值比较都是false
